package cn.lecosa.spark

import org.apache.spark.SparkConf
import org.apache.spark.SparkContext

object mapPartion {
  def main(args: Array[String]): Unit = {
    val conf = new SparkConf(); //创建SparkConf对象  设置spark参数
    conf.setAppName("wow,My First Spark App!"); //设置应用程序的名称，在spark程序运行的监控界面可以看到名称
    conf.setMaster("local[3]"); //此时，程序在本地运行，不需要安装spark集群

    val sc = new SparkContext(conf);

    val a = sc.parallelize(1 to 10, 3)
    //定义两个输入变换函数，它们的作用均是将rdd a中的元素值翻倍
    //map的输入函数，其参数e为rdd元素值   


    val b = a.map(myfuncPerElement).collect
    val c = a.mapPartitions(myfuncPerPartition).collect

  }
  
      def myfuncPerElement(e: Int): Int = {
           println("run in no partition")
//      println("e=" + e)
      e * 3
    }
    //mapPartitions的输入函数。iter是分区中元素的迭代子，返回类型也要是迭代子
    def myfuncPerPartition(iter: Iterator[Int]): Iterator[Int] = {
      println("run in 分区 partition")
      var res = for (e <- iter) yield e
//      res.foreach(println)
      res
    }
}